# Lab 1: Развертывание frontend-приложения

В данной лабораторной работе вы будете использовать репозиторий GitVerse с исходным кодом готового single page application написанного на React, соберете docker-образ, загрузите его в приватный репозиторий Artifact Registry и развернете контейнер в облачной среде Container Apps.

### 1. (Опционально) Клонируйте репозиторий кода c GitVerse
![revision-running](images/gitverse_clone.png)
```
git clone https://gitverse.ru/sc/cloudru/evo-app-services-workshop.git
``` 

### 2. Создание реестра в Artifact Registry
В личном кабинете https://console.cloud.ru перейдите в сервис Artifact Registry и нажмите «Создать реестр».
![revision-running](images/ar_create_registry.png)

Укажите название реестра — оно станет частью URI, который вы будете использовать для аутентификации в Artifact Registry. Название реестра должно быть глобально уникальным в сервисе Artifact Registry. 

![revision-running](images/create_registry.png)

Скопируйте полученный URI реестра, он будет необходим при выполнении дальнейших шагов. 

### 3. Получение ключей доступа для реестра
В личном кабинете, в профиле пользователя создайте ключ доступа. Сохраните пару Key ID (логин) и Key Secret (пароль) 

### 4. Авторизация в реестре Artifact Registry 
Откройте терминал и введите команду для аутентификации. Вы можете использовать любой привычный для вас терминал.

```bash
docker login <URI_реестра> -u <keyid> -p <password>
```
где: 
<URI_реестра> — URI, сгенерированный после создания реестра в Artifact Registry.
<keyid> — логин от сервисного аккаунта (Key ID).
<password> — пароль от сервисного аккаунта (Key Secret).


### 5. Сборка и подготовка docker-образа

Cоберите на локальном компьютере готовый Docker-образ из репозитория GitVerse, выполнив в консоли следующую команду docker cli: 
```shell
docker build --tag <Название_реестра>.cr.cloud.ru/react-hello-world https://gitverse.ru/sc/mabondarevskiy/evo-app-services-workshop.git#main --platform linux/amd64
```
Данная команда собирает образ и тегирует его в формате готовым для дальнейшей загрузки в реестр.

linux/amd64 - единственная платформа, которая поддерживает сервис Container Apps

### 6. Загрузка docker-образа
Загрузите образ в реестр образов Artifact Registry, выполнив команду.
```bash
docker push <URI_реестра>/<repository_name>
```

где: 
<URI_реестра> — URI, сгенерированный после создания реестра в Artifact Registry.
<repository_name> — имя будущего репозитория в Artifact Registry. 
Имя репозитория должно соответствовать имени Docker-образа. Если на предыдущем шаге вы скачивали готовый образ Cloud.ru, то в качестве имени репозитория укажите react-hello-world.

Убедитесь, что в Artifact Registry появился репозиторий с указанным именем и загруженный образ.

### 7. Создание и запуск контейнера в сервисе Container Apps.
Откройте меню загруженного образа и нажмите **Создать Container App**. 
![revision-running](images/run_from_ar.png)


Заполните поля и активируйте опции:

**Название контейнера** — произвольное название контейнера, может совпадать с именем образа — например, react-hello-world.


**Порт контейнера** — порт, на котором будет работать контейнер.
Принимаются значения от 1 до 65535 включительно.


**vCPU/RAM** — количество vCPU и RAM, которые выделяются для каждого экземпляра контейнера при обработке вызова. Выберите минимальную конфигурацию.

**Минимальное** и **максимальное количество экземпляров** при масштабировании сервиса. 

Опция **Публичный адрес**— активируйте опцию, чтобы получить URL-адрес для вызова контейнера из интернета по HTTPS.

Опция **Автоматическое развертывание** — если опция активирована, то каждый раз после загрузки в Artifact Registry новой версии образа на стороне Container Apps будет автоматически создаваться новая ревизия контейнера на базе обновленной версии образа.

Нажмите **Создать**.

![run_from_ar_form](images/run_from_ar_form.png)

Откроется страница сервиса Container Apps. 
Контейнер будет запущен в течение нескольких минут.

Когда контейнер перейдет в статус **Выполняется**, значит он успешно запущен.

![revision-running](images/ca_running.png)


### 8. Проверка рабостоспособности развернутного приложения
Дождитесь появления **Публичного URL**, скопируйте его и вставьте в адресную строку браузера.
!!! warning
    Если приложение не отвечает проверьте в списке ревизий, что последняя ревизия (первая по списку) в статусе Выполняется

![revision-running](images/revision_running.png)
    
!!! sucess
    Поздравляем, вы только что развернули приложение в облачном контейнере и опубликовали его в интернет 🙌 

### Заключение
В данной лабораторной работе вы научились:

- загружать docker-образ в Artifact Registry
- создавать и запускать контейнер с помощью сервиса Container Apps

В следующей лабораторной работе вы научитесь развертывать backend-приложения и познакомитесь с дополнительными настройками облачных сервисов Container Apps и Artifact Registry.